package test;

import java.util.Scanner;

public class Main2 {
	//fix.2
    static A[] st;

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);  
        //输入  
        String[] strs = sc.nextLine().split(" ");
    	
    	int l = Integer.parseInt(strs[0]);
    	int n = Integer.parseInt(strs[1]);
        //初始化   
    	//fix.1
//        for(int i=0;i<st.length;i++) {
//            st[i]=new A(-1,-1);
//        }
    	st = new A[4*l];
    	
        build(1, 1, l);

        while(n>0) {
//            char c=sc.next().charAt(0);
//            int a=sc.nextInt();
//            int b=sc.nextInt();
//            if (c=='C') {
//                updata(1, a,b);
//            }else {
//                System.out.println(query(1, a, b)[7]);
//            }
            
            strs = sc.nextLine().split(" ");
    		int n1 = Integer.parseInt(strs[1]);
    		int n2 = Integer.parseInt(strs[2]);
    		if(strs[0].charAt(0)=='C') {
    			updata(1, n1, n2);
    		}else {
    			int[] res = query(1,  n1, n2);
    			System.out.println(res[7]);
    		}
            
            
            
            
            n--;
        }
    }
    static int[] merge(int[] a1,int[] a2) {
    	 int l=0;
         int r=0;
         int[] arr=new int[8];
         for(int i=0;i<8;i++) {
             if (a1[l]>=a2[r]) {
                 arr[i]=a1[l];
                 l++;
             }else {
                 arr[i]=a2[r];
                 r++;
             }
         }
         return arr;
    }
    static void push(int n) {
        int l=0;
        int r=0;
        for(int i=0;i<8;i++) {
            if (st[n*2].arr[l]>=st[n*2+1].arr[r]) {
                st[n].arr[i]=st[n*2].arr[l];
                l++;
            }else {
                st[n].arr[i]=st[n*2+1].arr[r];
                r++;
            }
        }
    }

    static void build(int i,int cl,int cr) {
        if (cl==cr) {
            st[i]=new A(cl,cr);
            return;
        }
        int mid=(cl+cr)>>1;
        build(i*2, cl, mid);
        build(i*2+1, mid+1, cr);

        //此处少了push，建树的时候每个非叶子节点都要排好序
        st[i]=new A(cl,cr);
    }
    static void updata(int i,int n,int val) {
        if (st[i].l==n&&st[i].r==n) {
            st[i].arr[0]=val;
            return;
        }
        int mid=(st[i].l+st[i].r)>>1;
        if (n>mid) {
            updata(i*2+1, n, val);
        }else {			
        	updata(i*2, n, val);
		}
        push(i);
    }
    static int[] query(int i,int l,int r) {
        if (st[i].l>=l&&st[i].r<=r) {
            return st[i].arr;
        }
        
        int[] arr=new int[8];
        int mid=(st[i].l+st[i].r)>>1;
        if (l<=mid) {
        	//fix.4
            arr=merge(arr,query(i*2, l, r));
        }
        if (r>mid) {
        	//fix.4
			arr=merge(arr,query(i*2+1, l,r));
		}
        return arr;
    }
}
class A{
    int l;
    int r;
    //fix.3
    int[] arr;
    public A(int l, int r) {
        //super();
        this.l = l;
        this.r = r;
        //fix.3
        arr=new int[8];
    }
    
}